#include #include #include #include #include extern void switchTur(); extern int tur; extern int checkWin(int board[9]); extern int board[9]; int hittaTopDrag(int board[9]); int max(int a, int b); int min(int a, int b); int miniMax(int board[9], int djup, bool isMax); int max(int a, int b) { if (a < b) { return b; } else if (a > b) { return a; } return a; } int min(int a, int b) { if (a < b) { return a; } else if (a > b) { return b; } return a; } int miniMax(int board[9], int djup, bool isMax) { int p = checkWin(board); if (p != 0) { return p; } if (isMax) { int top = -1000; for (int i = 0; i <= 8; i++) { if (board[i] == 0) { board[i] = 1; top = max(top, miniMax(board, djup + 1, !isMax)); board[i] = 0; } } return top; } else { int top = 1000; for (int i = 0; i <= 8; i++) { if (board[i] == 0) { board[i] = 2; top = min(top, miniMax(board, djup + 1, !isMax)); board[i] = 0; } } return top; } } int hittaTopDrag(int board[9]) { int c = 0; for (int i = 0; i <= 8; i++) { if (board[i] != 0) { c++; } } if (c == 0) { while (true) { int drag = rand() % 9; if (drag == 0 || drag == 2 || drag == 6 || drag == 8) { return drag; } } } int board2[9]; // Nytt bräde var man såtter in och testar den nya positionen for (int i = 0; i <= 8; i++) { board2[i] = board[i]; } for (int i = 0; i <= 8; i++) { if (checkMove(i)) { board2[i] = tur; if (checkWin(board2) == tur) { return i; } board2[i] = 0; } } for (int i = 0; i <= 8; i++) { board2[i] = board[i]; } for (int i = 0; i <= 8; i++) { if (checkMove(i)) { board2[i] = 2; if (checkWin(board2) == 2) { return i; } board2[i] = 0; } } int topVal = -1000; int topDrag = -1; for (int i = 0; i <= 8; i++) { if (board[i] == 0) { board[i] = tur; int dragVal = miniMax(board, 0, false); board[i] = 0; if (dragVal > topVal) { topDrag = i; topVal = dragVal; } } } return topDrag; }